iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 29
1
Security

CTF 的三十道陰影系列 第 29

Day29: [Pwn] 剩下的,就是你們的事了

  • 分享至 

  • xImage
  •  

前言

今天 HITCON CTF 初賽總算圓滿落幕,預告一下明天最後一天的主題是 HITCON CTF 2019 Quals,會講述這次身為出題人員 on site 的心得,順便聊一下這兩天主辦方的內幕 (?) 今天就先讓我好好思 (ㄅㄨˇ) 考 (ㄇㄧㄢˊ) 要怎麼呈現吧 ... XD

今天主要介紹的是交大的時期的 CTF 歷史,雖然交大在 CTF 的成績上沒有台大優秀,接連誕生 217 和 Balsn 兩隻頂級強隊,但也是曾經輝煌過一段時間

Secure Programming

昨天的故事聊到 jeffxx 擔任好幾屆的 程式安全 助教,並設計課堂作業放到 wargame.cs.ncut.edu.tw 讓學生練習 (像是 第二天的例題),某方面來說程式安全這門課程,可以說是 HITCON CTF team 的 pwn 的起源 ...... XD

HITCON CTF team 成員從 DEF CON CTF 回國後,無論是台大還是交大,都覺得雖然僥倖拿了第二名,但有很大的程度是建立在成功在 PPP 的機器上種下後門分走不少分數,只靠當時參賽的 10 人實在太少,難以和國際強隊抗衡,因此決定回台灣之後要開始培育更多 CTF 的戰力出來,台大那邊是開設了 計算機安全,交大這邊則是決定修改原本的程式安全課程,在徵得 黃世昆 老師的同意後,全程由 jeffxx, atdog, ddaa 輪流上課,並請 lucas, Orange 當特邀講師,課程內容全部講述 CTF 相關的實戰技巧,並在課堂中帶同學實際操作,希望以最快速度培育出有辦法在 DEF CON CTF 幫得上忙的戰力出來

不過當時的 CTF 還是一個美好的年代 (?),加上課程是 程式安全,因此只有講述 pwn, reverse, web 三個領域的題目,crypto 和 misc 就沒有提及了,回顧當時的課綱,在現在的計算機安全大概要在兩個星期講完吧......XD

1.  Overview
2.  Static Analysis (1)
3.  Static Analysis (2)
4.  Dynamic Analysis (1)
5.  Dynamic Analysis (2)
6.  Exploit - Command Injection
7.  Exploit - Smash the Stack
8.  Exploit - Heap Feng Shui
9.  Exploit - Format String
10. Exploit - Writing shellcode
11. Mitigation - Stackguard
12. Mitigation - DEP and ASLR
13. Mitigation - Return Oriented Programming
14. Web Exploit (1)
15. Web Exploit (2)
16. Project Presentation (1)
17. Project Presentation (2)
18. Final Exam (join exam with a NTU related course in CTF style)

由於 wargame.cs.nctu.edu.tw 已經瀕臨倒站,而且基於 FreeBSD 的環境也不適合出 CTF 領域常見的 Linux 題目,因此最後決定重新設計一個題目網站

  • 當時 jeffxx 和 atdog 因為正在學習 ruby,討論後決定用當時熱門的 Ruby on Rails 來寫網站,結果因為工作太忙沒時間寫,結果都只有我在寫 QQ

    • 一個星期寫了很陽春的網站,再隨便套個 boostrap,完全體會到 會用 Rails 寫網站不代表 ruby 這件事,現在覺得假如當時有 CTFd 就好了...... XDD
  • 網站大概長得像這樣,樸實無華且枯燥...... (汗

可惜的是就結果而言,當時的程式安全修課生,雖然培育了一些實力不錯的成員出來,但最後大部分沒有成功加入 HITCON CTF team QQ 不過倒是釣到兩個非修課生 LaysAngelboy XDD

  • Lays 是第二期最早加入 HITCON CTF team 的成員,當時以 HITCON 的名字註冊 SECCON 2014 CTF,邀請 程式安全 和 計算機安全 表現比較優秀的修課學生一起來打,順利進入了決賽,後來 Orange, jeffxx, atdog, lucas, Lays 還有我六人去日本參加決賽 XD
    • 但因為限制四人,我和 lays 只能待在場外幫忙加油,然後解莫名其妙的題目自嗨 T__T
  • Angelboy 以旁聽生的身分在期末考亂入比賽 XD
  • 時隔多年之後,bruce30262 於第五期加入 HITCON CTF team

CTCTF 台交賽

當年 102 年度的程式安全的期末考,就是之前稍微提過、HITCON CTF Final 的前身、傳說中的 **CTCTF 台交賽,**全稱為台交網路攻防搶旗賽,但跟 ACM 的那個台交賽沒有關係就是了 XD 至今可以看到當時的 網站 .....XD 偉哉中華電,讚嘆中華電

這個念頭是 jeffxx 所發想的,由於受到當時 BCTF 百度盃的啟發,我們覺得要招募更多戰力,勢必得嘗試辦一場 Attack & Defense 的比賽,才可以讓大家真正體會到打 Attack & Defense 的樂趣和困難 XD 與當時台大的助教 seanwu 和 shik 討論後覺得可行,就開始了一系列的計畫,主要由台大負責設計適合放在 A&D 的題目 (Orange 幫忙出了一題 web),交大這邊負責 infrastructure 的設計,包含參賽隊伍要維護和攻擊的 server、網路架構、戰場設計 等等

  • 我主要負責寫 service check 和處理硬體器材的部分,包含 server 和 network 架設

  • jeffxx 還有其他被抓來幫忙的 CRAX 成員負責寫 scoreboard 和網站

  • atdog 負責搞定與台大連接的 VPN 和管理 service server 的整個後端系統

  • Lays 負責戰場系統,原來是 Lays 你自己跳坑的 (茶)

  • 最後冠軍是由台大的隊伍 <(_ _)> shik 獲得 (不過成員裡面沒有 shik,倒是有飛到日本玩的 peter50216 ..... XD),第二名也是台大的隊伍,三四名都是交大的隊伍,第三名是 DSNS Lab 組成的隊伍,第四名 NASA 是由 SQLab 的新生和另一個資安 Lab 的成員組隊

    • <(_ _)> shik 的成員 cebrusfsLays 同樣於第二期加入 HITCON 團隊,也是當時打 SECCON CTF 的成員之一
      • 還有一名成員 fcrh 有幫 HITCON CTF 打過幾次比賽
    • bruce30262 在第三名的隊伍 DSNS Lab
    • david942j 在第九名的隊伍 wolfcat,但該隊伍只有兩名成員 QQ
    • angelboy 在第十一名的隊伍 I have girls that,是到進入到隊伍 BambooFox 後打了幾場比賽,之後才加入到 HITCON CTF team,比 Lays 晚一點不過也算二期成員 XD
  • 下列是其他 CTF team 的成員:

    • NCTUCSC 的第一任正副會長 bananapplemangoking 在 第八名隊伍 MagnoHot
      • NCTUCSC 全稱為 網路安全策進會,是 BambooFox 在交大的正式社團名稱
    • Balsn 成員 ysc 在第十名隊伍 YSTH
    • HITCON GIRLS 成員 freetsubasa 在第十一名的隊伍 I have girls that
  • 最後讓我們回顧一下當時的 final countdown XD 完整的戰場和戰況在 這裡

BambooFox

於 HITCON CTF 2014 首次出現在世人面前,由於是 HITCON Wargame 首次轉型為 HITCON CTF,並對國際上的優秀隊伍開放報名,眾人感受到了危機因此聯合了 CRAXdsns,並邀請 CSCC 對 HITCON CTF 有興趣的成員一同參加,最後成功獲得了第九名的成績

  • 但也是有史以來的最好成績 QQ 後來幾年主力成員都在 HITCON CTF 出題目,沒辦法參與比賽,只能靠後進成員自行努力
  • HITCON CTF 2014 的 scoreboard 是由 lsc 撰寫,lsc 是後來 Balsn 的創辦人之一,不過在 2018 年被我們挖到 HITCON CTF team 幫忙當工具人 XD

後來 CRAX 和 dsns 的成員就繼續沿用 BamfooFox 作為 CTF 隊伍名稱,持續挑戰國際上的 CTF 比賽,希望能跟 217 分庭抗禮

  • 大部分的比賽都是被 217 吊打 QQ 不過還是有贏過幾次 217 (seldom 不是 never XDD)
  • 在 Lays, angelboy, meh 陸續加入之後,在 pwnreverse 的領域變成世界頂級的水平,加上 jeffxx 和 atdog 的穩定發揮,在 2015~2016 年間是世界上最頂尖的 CTF 隊伍之一,好幾場比賽與 217 一同進入排行榜前 10
  • 曾經受到中國隊伍 ROIS 邀請參加海峽盃、羅馬尼亞資安團體 CCSIR.org 邀請參加 DefCamp CTF,還有 HITB CTF Amsterdam 2016
  • 可惜一直以來都沒有成功在 CTF 競賽中拿到第一名的成績,最接近的一次是超過 217 在 Sharif University CTF 拿到第二名

後來在 謝續平 教授的支持之下,成立學校社團 網路安全策進會,並定期開授社課給外系對 CTF 有興趣的學生參加

可惜隨著主力成員畢業、開始面臨工作或將重心轉移到 HITCON CTF team 而淡出 BambooFox 的隊伍之後,後來成員的實力沒有提升到足夠應付國際賽水平的強度,漸漸脫離了一線隊伍的行列

  • meh 是最後一名從 BamfooFox 輸出到 HITCON CTF team 的成員,也是唯一的女性成員,在 angelboy 的斯巴達式教育之下,變成了團隊內對 heap 第二熟悉的人物
    • meh 發現的 CVE-2018-6789 讓我知道我是個 base64 都寫不好的廢物 QQ

近兩年開始與 Balsn, DoubleSigma, Kerkeryuan 等隊伍聯合組成隊伍 BFS 進行比賽,於 2018 年以第 22 名的成績打進 DEF CON 25 Final,並於決賽取得第 12 名的成績

  • 往年 22 名應該進不了決賽,但剛好今年換主辦方,主辦方想多取一些隊伍讓決賽變成大亂鬥,結果還真的變成大亂鬥了.....主辦方方寸大亂被參賽隊伍批鬥
  • 2019 整個 BFS 與 HITCON 聯隊希望挑戰冠軍,可惜依然獲得第二名的成績

剩下的,就是你們的事了

在從交大畢業後,我就開始了漫長三年的替代役生涯,把 BamfooFox 的棒子交接給後面的學弟妹,原本期許自己能像 Lucas 或 jeffxx 這樣能在工作之餘給予學弟妹幫助,可惜自己能力有限,無法在兼顧工作的同時,讓自己的技術更進一步,工作之餘的時間只能勉強讓自己的技能不要生疏,但整個 CTF 的發展卻越來越慘無人道 QQ,漸漸開始無法跟上大家的水平,也開始一連串懷疑人生的低潮期

現在研替已經到期,自己終於還完國家債務暫時離工作崗位暫時休息,但也已經不再年輕,需要考慮種種麻煩的大小事,未來大概依然無法像過去般在 CTF 領域全心投入,因此特地在這 30 天挑戰的後幾篇文章回憶這幾年在 CTF 領域的奮鬥,一方面為自己的成長做個見證,也希望避免這些屬於台灣的榮耀未來被人忘記

台灣不像中國大陸那邊有夠多人又有夠多的經費可以搞一個 XCTF 聯賽來源源不斷的培育人才,但我們也會用自己的方式把 CTF 傳承下去,這兩天看著 Balsn 跟世界級強隊爭奪 HITCON CTF 的冠軍,很高興台灣也出了 HITCON 之外的頂級強隊,相信之後 Balsn 也會把自己 CTF 的經驗傳承,培育更多的新血進 CTF (能補充進 HITCON, Balsn 或新的隊伍都好 XD),讓台灣一直會有頂級強隊在 CTF 圈中發光發熱,而曾經輝煌的 HITCON、217 等隊伍就不會被這個圈子給遺忘

0x1c: CTCTF 2015 pwn starbound

starbound 是因為出題者 seanwu 當時沉迷 steam 上的同名遊戲,因此有了這題的誕生 XD 當時有拿這題做成簡報,跟鑽石級贊助商和沛科技交差 (?),也是我唯一一次有機會看到翟本橋本人 XD


這題是 32 bit 的程式 (現在看起來覺得好不習慣阿...),執行起來題目會長的像這樣,每次連上的地形都會變動:

[Info] Landing ...
  _______________________________________________
 / Pos: 270 HP: 100                              \
|                                                 |
|                                                 |
|             ,__~                                |
|       ^     ....                                |
|    ,_-.MMM,-....\                               |
|  ,-....wMw.......                               |
| /....#..w........                      ^        |
|-...........#.....\                    /.\       |
|...................`~                 /...`_~    |
|..............#......                 #......`__~|
|....#................\                ...........|
|............#.........  o            /...........|
|.......#..............\ T ,_________-..........#.|
|..........#............`~ ........#..............|
|................#........v..#....................|
|.......#...................................@.....|
|.........@.......#...............................|
 \_______________________________________________/


-+STARBOUND v1.0+-
  0. Exit
  1. Info
  2. Move
  3. View
  4. Tools
  5. Kill
  6. Settings
  7. Multiplayer
>

因為是 Attack & Defense 的題目,當時出題者預期是寫了六個漏洞,但比賽開始才發現有一個不能打 XDD,另外還有一個預期外的問題,五個漏洞分別如下:

  1. 選單輸入數字後,存在 out of bound 的問題
    • 這題執行功能的方式是透過選單輸入的 idx 去查 function table 的 function 執行,out-of-bound 可以超出 function table 得到指定位置的 address
    • 6. Settings > 2. Name 可以在 bss 段輸入任意內容,因此可以用來偽造 function table,配合 out-of-bound 的問題做到控制 eip
  2. 6. Settings > 2. Name 在讀取 name 時存在 buffer overflow 的問題,可以蓋掉 menu 的 function pointer
  3. 1. Info 會讀取 /home/flags/starbound 的內容進行 memfrob(),當遊戲結束透過 do_send_record() 紀錄分數時,會 leak 出 memfrob() 過後的 flag
  4. 承上,1. Info 讀取完 flag 之後沒有關閉 fd,加上 7. Multiplayer > 3. Disable在 close fd 之後不會將 fd reset 成 -1,可以讓 7. Multiplayer > 4. Teleport 使用的 fd 實際上是 read flag 的 fd,就可將 flag 透過 teleport 的功能送出
    • 題目故意 read flag 完之後將 fd lseek 回文件開頭導致此問題 XD
  5. 由於 7. Multiplayer 是透過 udp 實作,而 7. Multiplayer > 4. Teleport 是接收到 \n 當作是結束,可以在 7. Multiplayer > 5. Share Your Coordinate 的時候直接切斷 connection,讓 getline 不會收到換行,馬上再做一次連線,因為是 udp 可以繼續傳輸,而 recv 方就會收到超出預期的的長度發生 overflow

不能打的漏洞和預期外的問題分別是:

  • 遊戲死亡時會進入 do_die() 函式,原本設計了 format string 的漏洞,但編譯時忘記開啟了 FORTIFY 的保護,導致此功能只剩下 leak 的作用,但 leak 完就 exit 結束因此沒什麼用 XD
  • 跟上面的 5. 類似,同樣是 udp 造成的問題,sender 再 recver 等待之前先送超出 udp packets buffer 長度的 data,recver 會接收不到表示 length 的欄位,此時再馬上連線送第二次的 data,recver 會將一開始可控制的任意 data 當成是上一次傳輸的 length,因此造成 buffer overflow

上一篇
Day28: [Misc] 料理是帶給人們幸福的東西
下一篇
Day30: [Pwn] 在相同規則下磨練自己的能力,絞盡腦汁比拚成果,從中獲得的經驗才是最寶貴的
系列文
CTF 的三十道陰影31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言